package br.com.utfpr.sprites;

import java.util.ArrayList;

import android.test.suitebuilder.annotation.LargeTest;

public class Game {
	
	private int [] caixasPorFaseParaPassar = {10, 16, 20, 25};
	private int [] caixasPorFaseConsecutivas = {1, 2, 3, 4};
	private int faseAtual = -1;
	private int errosConsecutivos = 0;
	private int acertos = 0;
	private int score = 0;
	private int vidas = 4;
	private boolean podeInserirBomba;
	int caixasAtivas = 0;
	
	private Sprites2Activity sprites;
	
	public Game(Sprites2Activity sprites){
		this.sprites = sprites;
		//inicia
		novaFase();
	}
	
	private void novaFase(){
		faseAtual++;
		acertos = 0;
		//solta as caixas da nova fase
		//cada uma em uma posicaoAleatoria
		ArrayList<Integer> caixas = Utils.sorteiaPosicoesCaixas(Sprites2Activity.CAMERA_WIDTH, Sprites2Activity.LARGURA_CAIXA);
		for(int i = 0; i < caixasPorFaseConsecutivas[faseAtual];i++){
			if(caixasAtivas<caixasPorFaseConsecutivas[faseAtual]){
				sprites.jogaCaixa(Sprites2Activity.LARGURA_CAIXA*caixas.get(i));
				caixasAtivas++;
			}
		}
		sprites.modificarFase(faseAtual);
		//indica fim de jogo
		if(faseAtual>=caixasPorFaseParaPassar.length){
			System.out.println("Game Over!!!");
			sprites.gameOver();
		}
	}	
	
	public void addAcerto(){
		score++;
		acertos++;
		sprites.modificarScore(score);
		if(trocouFase()){
			novaFase();
		}
	}
	
	public void addErro(){
		errosConsecutivos++;
		//verifica se morreu
		if(punir()&&!morreu()){
			sprites.modificarVida(vidas);
		}
		else if(morreu()){
			//termina o jogo
			sprites.gameOver();
		}
	}
	
	public boolean trocouFase(){
		if(acertos==caixasPorFaseParaPassar[faseAtual]){
			return true;
		}
		return false;
	}
	
	public boolean punir(){
		if(errosConsecutivos>3){
			vidas--;
			errosConsecutivos=0;
			return true;
		}
		return false;
	}
	
	public boolean morreu(){
		if(vidas == 0){
			return true;
		}
		return false;
	}

	public synchronized void atualizaBombas() {
		//decrementa as caixas ativas
		caixasAtivas--;
		//verifica se não atingiu o score
		if(trocouFase()){
			novaFase();
		}
		//verifica se não possui nenhuma caixa ativa
		if(caixasAtivas==0){
			ArrayList<Integer> caixas = Utils.sorteiaPosicoesCaixas(Sprites2Activity.CAMERA_WIDTH, Sprites2Activity.LARGURA_CAIXA);
			for(int i = 0; i < caixasPorFaseConsecutivas[faseAtual];i++){
					sprites.jogaCaixa(Sprites2Activity.LARGURA_CAIXA*caixas.get(i));
					caixasAtivas++;
			}		
			System.out.println("Caixas ativas: " + caixasAtivas);
		}
	}
	
	public int getScore(){
		return score;
	}

}
